// 声明字符串
void sms()
{
	char a[]="aa";
	char b[3]={'b','b','\0'};
	char c[10]; // 声明空字符串

	char d[5]; // 5 表示最多输入4个字符 最后一位是 \0 结束符
	char *e[10]; // 输入必须这样写
	char f; // 必须单引号
	char *p; // 直接赋值可以这样写
	
	printf("请输入char d[5]的值：");
	scanf("%s", d);
	printf("char d[5]的值：%s\n", d);

	printf("char d[5]的 d[0]的值：%c\n", d[0]);

	printf("请输入char *e[10]的值：");
	scanf("%s", &e); 
	printf("char *e[10]的值：%s\n", e);

	f = 'A'; // 必须单引号
	printf("char f的值：%c\n", f);

	p = "abcde"; // 初始化值
	printf("char *p的初始值：%s\n", p);

	p = "bnmhg"; // 改变字符串的值
	printf("char *p的改变值：%s\n", p);
}

//返回字符串的几种方法
// 1、 将字符串指针作为函数参数传入，并返回该指针。
char * rs1(char *str)
{
	str = "rs1";
	return str;
}

// 2、 使用malloc函数动态分配内存，注意在主调函数中释放。
char * rs2()
{
	char *a;
	a = (char*)malloc(sizeof(char) * 5);
	a = "rs2"; // 注意保留一位 '\0'
	return a;
}

// 3、 返回一个静态局部变量。
char * rs3()
{
	static char *a;
	a = "rs3"; 
	return a;
}

// 4、 使用全局变量。
char z[5];
char * rs4()
{
	strcpy(z, "rs4");
	return z;
}
//动态返回字符串的几种方法

void rs10()
{
	printf("1、 将字符串指针作为函数参数传入，并返回该指针。\n");
	char *a;
	a = rs1(a);
	printf("%s\n\n", a);

	printf("2、 使用malloc函数动态分配内存，注意在主调函数中释放。\n");
	char *b;
	b = rs2();
	printf("%s\n", b);
	printf("使用malloc函数，注意释放内存\n\n");
	free(b);
	b = NULL;

	printf("3、 返回一个静态局部变量。\n");
	char *c;
	c = rs3();
	printf("%s\n\n", c);

	printf("4、 使用全局变量。\n");
	char *d;
	d = rs4();
	printf("%s\n\n", d);
}

void strTest()
{
	
}

//动态返回字符串方法 https://www.cnblogs.com/lifan3a/articles/10942241.html
// 字符串 demo
void StrDemo()
{
	// sms(); // 声明字符串
	rs10(); // 返回字符串案例
	//strTest();
}